// node 22_0到99乱序输出改为顺序输出.js

//call() 传入this，并立即执行函数，1参为this（调用者）,后的参为给函数传递的参数

//要求:
//1,只能修改 setTimeout 到 Math.floor(Math.random())的代码
//2,不能修改 Math.floor(Math.random() * 1000)
//3,不能使用全局变量

function print(n) {
    setTimeout(() => {
        console.log(n)
    },Math.floor(Math.random() * 1000))
}

//方法1
//立即执行函数
function print2(n) {
    setTimeout((() => {
        console.log(n)
        return () => {}
    })(),Math.floor(Math.random() * 1000))
}

//方法2
//立即执行函数-call()
function print3(n) {
    setTimeout((() => {
        console.log(n)
        return () => {}
    }).call(null,[]),Math.floor(Math.random() * 1000))  //call
}

//方法3
//使用setTimeout的第三个参数
function print4(n) {
    setTimeout(() => {
        console.log(n)
    },10,Math.floor(Math.random() * 1000))
}

for (let i = 0; i < 10;i++) {
    print3(i)
}